' ***************************************************** ' * * ' * K a m p f u m E r i a d o r * ' * --------------------------------- * ' * * ' * Programmiert im August 1987 von : * ' * * ' * Ralf Böwing Roland Hartz * ' * Platanenweg 4 Platanenweg 8 * ' * 4425 Billerbeck 4425 Billerbeck * ' * * ' ***************************************************** REM *** Daten initialisieren *** LOCATE 10,25:PRINT "Bitte warten - ich lade Daten..." DEFINT zx,zy,bldnr,bldnralt,turn DIM fw(15,2) DIM SHARED spar%(38,38),fig%(38,38),oo%(9),ab%(9),ob%(206,24),leer%(206) DIM SHARED st%(94),ma%(94),wa%(94),bi%(94),nam$(17),fb%(6),fganz(1) DIM SHARED beweg%(94) ON ERROR GOTO fehler OPEN "Eriador.Grafik" FOR INPUT AS 1 FOR j=0 TO 24 FOR i=0 TO 206 ob%(i,j)=CVI(INPUT$(2,1)) NEXT i NEXT j CLOSE 1 FOR i=0 TO 206:leer%(i)=ob%(i,18):NEXT i GOSUB moveclr fganz(0)=47:fganz(1)=47 RESTORE zofb FOR i=0 TO 6:READ fb%(i):NEXT i zofb: DATA 7,4,5,14,15,2,15 OPEN "Eriador.Spiel" FOR INPUT AS 1 GOSUB loadcheck IF loadjn=0 THEN CLOSE 1:GOTO okw spm=1:loaded=1 FOR j=0 TO 38 FOR i=0 TO 38 spar%(i,j)=CVI(INPUT$(2,1)) fig%(i,j)=CVI(INPUT$(2,1)) NEXT i NEXT j FOR i=1 TO 94 st%(i)=CVI(INPUT$(2,1)) beweg%(i)=CVI(INPUT$(2,1)) NEXT i turn=CVI(INPUT$(2,1)) FOR i=0 TO 1 cx%(i)=CVI(INPUT$(2,1)) cy%(i)=CVI(INPUT$(2,1)) mm%(i)=CVI(INPUT$(2,1)) NEXT CLOSE 1 okw: IF spm<>1 THEN OPEN "Eriador.Spielfeld" FOR INPUT AS 1 FOR j=0 TO 38 FOR i=0 TO 38 spar%(i,j)=CVI(INPUT$(2,1)) NEXT i NEXT j CLOSE 1 END IF RESTORE bko FOR i=1 TO 9 READ oo%(i):READ ab%(i) NEXT i bko: DATA 0,26,13,26,26,26,0,13,13,13,26,13,0,0,13,0,26,0 RESTORE figpos:zaehl=0 FOR j=0 TO 17 READ anz FOR i=1 TO anz zaehl=zaehl+1 READ x,y:bi%(zaehl)=j IF spm<>1 THEN fig%(x,y)=zaehl NEXT i READ nam$(j) NEXT j figpos: DATA 9,8,9,10,9,9,8,18,2,20,2,19,1,20,11,22,11,21,10,"Axtmann" DATA 9,9,9,8,8,10,8,19,2,18,1,20,1,21,11,20,10,22,10,"Schwertkämpfer" DATA 6,7,7,11,7,17,0,21,0,19,9,23,9,"Legionär" DATA 6,7,9,11,9,17,2,21,2,19,11,23,11,"Ritter" DATA 6,7,8,11,8,17,1,21,1,19,10,23,10,"Schütze" DATA 3,9,7,19,0,21,9,"Belag.Mannsch." DATA 6,8,7,10,7,18,0,20,0,20,9,22,9,"Adler" DATA 1,0,0,"König des Lichts" DATA 1,4,3,"Magier" DATA 9,8,35,10,35,9,36,19,33,21,33,20,34,30,30,32,30,31,31,"Keulenmann" DATA 9,9,35,8,36,10,36,20,33,19,34,21,34,31,30,30,31,32,31,"Schwertkämpfer" DATA 6,7,37,11,37,18,35,22,35,29,32,33,32,"Legionär" DATA 6,7,35,11,35,18,33,22,33,29,30,33,30,"Ritter" DATA 6,7,36,11,36,18,34,22,34,29,31,33,31,"Schütze" DATA 3,9,37,20,35,31,32,"Belag.Mannsch." DATA 6,8,37,10,37,19,35,21,35,30,32,32,32,"Drachen" DATA 1,38,38,"König d. Dunkels" DATA 1,35,34,"Magier" RANDOMIZE TIMER FOR i=1 TO 9 IF spm<>1 THEN st%(i)=INT(RND(1)*4)+5:st%(i+47)=INT(RND(1)*4)+5 ma%(i)=3:ma%(i+47)=3:wa%(i)=1:wa%(i+47)=1 NEXT i FOR i=10 TO 18 IF spm<>1 THEN st%(i)=INT(RND(1)*4)+7:st%(i+47)=INT(RND(1)*4)+7 ma%(i)=3:ma%(i+47)=3:wa%(i)=1:wa%(i+47)=1 NEXT i FOR i=19 TO 24 IF spm<>1 THEN st%(i)=INT(RND(1)*4)+9:st%(i+47)=INT(RND(1)*4)+9 ma%(i)=3:ma%(i+47)=3:wa%(i)=2:wa%(i+47)=2 NEXT i FOR i=25 TO 30 IF spm<>1 THEN st%(i)=INT(RND(1)*4)+11:st%(i+47)=INT(RND(1)*4)+11 ma%(i)=4:ma%(i+47)=4:wa%(i)=2:wa%(i+47)=2 NEXT i FOR i=31 TO 36 IF spm<>1 THEN st%(i)=INT(RND(1)*4)+7:st%(i+47)=INT(RND(1)*4)+7 ma%(i)=3:ma%(i+47)=3:wa%(i)=3:wa%(i+47)=3 NEXT i FOR i=37 TO 39 IF spm<>1 THEN st%(i)=INT(RND(1)*4)+4:st%(i+47)=INT(RND(1)*4)+4 ma%(i)=3:ma%(i+47)=3:wa%(i)=1:wa%(i+47)=1 NEXT i FOR i=40 TO 45 IF spm<>1 THEN st%(i)=INT(RND(1)*4)+13:st%(i+47)=INT(RND(1)*4)+13 ma%(i)=5:ma%(i+47)=5:wa%(i)=2:wa%(i+47)=2 NEXT i IF spm<>1 THEN st%(46)=INT(RND(1)*4)+12:st%(93)=INT(RND(1)*4)+12 ma%(46)=3:ma%(93)=3:wa%(46)=1:wa%(93)=1 IF spm<>1 THEN st%(47)=INT(RND(1)*4)+25:st%(94)=INT(RND(1)*4)+25 ma%(47)=4:ma%(94)=4:wa%(47)=13:wa%(94)=13 SCREEN 1,640,256,4,2 WINDOW 2,"",,0,1 OPEN "Eriador.Sprite" FOR INPUT AS 1 OBJECT.SHAPE 1,INPUT$(LOF(1),1) CLOSE 1 OBJECT.X 1,639:OBJECT.Y 1,255 DECLARE FUNCTION Move& LIBRARY DECLARE FUNCTION OpenDiskFont& LIBRARY LIBRARY "graphics.library" LIBRARY "diskfont.library" Diskfont "garnet",16 GOSUB farbreset Map=0:einl=0:GOSUB TitleScreen GOTO Spiel REM *** Unterprogramme und Subroutinen *** SUB Diskfont (font$,height%) STATIC SHARED strFont& prefs%=96 font0$=font$+".font"+CHR$(0) IF strFont&<>0 THEN CALL CloseFont (strFont&) textAttr&(0)=SADD(font0$) textAttr&(1)=height%*2^16+prefs% strFont&=OpenDiskFont& (VARPTR(textAttr&(0))) IF strFont&<>0 THEN CALL SetFont(WINDOW(8),strFont&) END SUB SUB Shadow (text$,spacing%,depth%,height%,mode%,x%,y%) STATIC IF mode%=0 THEN crsx%=POS(0)*height% crsy%=(CSRLIN)*8 ELSE crsx%=x%:crsy%=y% END IF IF crsy%<8 THEN crsy%=8 CALL SetDrMd&(WINDOW(8),0) E&=Move&(WINDOW(8),crsx%+depth%,crsy%+depth%) COLOR 9,0 PRINT text$; COLOR 11,0 E&=Move&(WINDOW(8),crsx%,crsy%) PRINT text$; END SUB SUB Mapon (bnr%) STATIC SHARED zx,zy,mpjn,bldnralt OBJECT.OFF 1 LINE (176,0)-(177,236),1,bf:LINE (177,236)-(639,236),1 LINE (0,0)-(172,236),1,b:LINE(1,0)-(171,236),1,b LINE (0,238)-(639,253),1,b:LINE(1,238)-(638,253),1,b FOR i%=ab%(bnr%) TO ab%(bnr%)+12 ii%=(i%-ab%(bnr%))*18+1 FOR j%=oo%(bnr%) TO oo%(bnr%)+12 jj%=(j%-oo%(bnr%))*35+180 IF fig%(j%,i%)<>0 THEN PUT (jj%,ii%),ob%(0,bi%(fig%(j%,i%))),PSET:GOTO zxy IF spar%(j%,i%)=0 THEN PUT (jj%,ii%),leer%,PSET:GOTO zxy PUT (jj%,ii%),ob%(0,spar%(j%,i%)+18),PSET zxy: NEXT j% NEXT i% mpjn=1:Zeigerset zx,zy,bnr%:OBJECT.ON 1 END SUB SUB warten (t%) STATIC m=MOUSE(0) t!=TIMER jgfh: IF TIMER<=t!+t% AND MOUSE(0)=0 THEN jgfh END SUB SUB Zeigerset (x%,y%,bnr%) STATIC OBJECT.X 1,(x%-oo%(bnr%))*35+194 OBJECT.Y 1,(y%-ab%(bnr%))*18+11 END SUB SUB mclr (y%,x%) STATIC LOCATE y%,x% crsx%=POS(0)*9:crsy%=(CSRLIN)*8 LINE (crsx%,crsy%)-STEP(18,12),0,bf END SUB fehler: IF ERR=53 THEN CLOSE 1:RESUME okw PRINT "Programmfehler !" END farbreset: RESTORE farben:colz=15 FOR i=0 TO colz FOR ii=0 TO 2 READ fw(i,ii) NEXT ii NEXT i farben: DATA 0,0,0,8,8,8,0,1,7,0,2,10 DATA 0,4,14,0,5,0,3,7,0,5,9,0 DATA 12,0,8,12,1,1,14,1,1 DATA 14,9,0,14,11,0,14,13,0,4,4,4,7,7,7 FOR i=0 TO colz PALETTE i,fw(i,0)/15,fw(i,1)/15,fw(i,2)/15 NEXT RETURN farbenaus: FOR i=0 TO 15 PALETTE i,0,0,0 NEXT RETURN loadcheck: CLS:LOCATE 6,17 PRINT "Es ist noch ein alter Spielstand gespeichert !" LOCATE 8,17:PRINT " Wünschen Sie, ihn fortzusetzen ?" k$=UCASE$(INKEY$) WHILE k$<>"J" AND k$<>"N" k$=UCASE$(INKEY$) WEND IF k$="J" THEN loadjn=1 ELSE loadjn=0 CLOSE 1 KILL "Eriador.Spiel" END IF LOCATE 10,37:PRINT "Ok." RETURN groclear: LINE (2,1)-(170,235),0,bf RETURN kleinclear: LINE (2,239)-(637,253),0,bf RETURN tasten: k$="" WHILE k$="" k$=INKEY$ WEND IF k$>="1" AND k$<="9" AND bldnr=VAL(k$) THEN tasten IF k$>="1" AND k$<="9" THEN bldnr=VAL(k$):zx=oo%(bldnr)+(zx MOD 13):zy=ab%(bldnr)+(zy MOD 13)::Mapon bldnr:GOTO tasten IF k$=CHR$(13) AND (fig%(zx,zy)>=offs AND fig%(zx,zy)<=offs+46) AND beweg%(fig%(zx,zy))<2 THEN GOSUB genommen:RETURN IF UCASE$(k$)="Q" THEN tza=15 RETURN END IF IF k$=CHR$(28) AND zy>0 THEN IF (zy MOD 13<>0) THEN zy=zy-1:Zeigerset zx,zy,bldnr ELSE zy=zy-1:bldnr=bldnr+3:Mapon bldnr END IF END IF IF k$=CHR$(29) AND zy<38 THEN IF ((zy+1) MOD 13<>0) THEN zy=zy+1:Zeigerset zx,zy,bldnr ELSE zy=zy+1:bldnr=bldnr-3:Mapon bldnr END IF END IF IF k$=CHR$(30) AND zx<38 THEN IF ((zx+1) MOD 13<>0) THEN zx=zx+1:Zeigerset zx,zy,bldnr ELSE zx=zx+1:bldnr=bldnr+1:Mapon bldnr END IF END IF IF k$=CHR$(31) AND zx>0 THEN IF (zx MOD 13<>0) THEN zx=zx-1:Zeigerset zx,zy,bldnr ELSE zx=zx-1:bldnr=bldnr-1:Mapon bldnr END IF END IF IF k$=CHR$(139) THEN SOUND 700,4.5,200,0:SOUND 710,4.5,200,1 OBJECT.OFF 1 LINE (180,1)-(639,235),0,bf LOCATE 6,1:Shadow "Legende :",9,1,9,0,0,0 LOCATE 9,1:Shadow "Ebene :",9,1,9,0,0,0:LINE (123,65)-(132,73),7,bf LOCATE 11,1:Shadow "Wasser :",9,1,9,0,0,0:LINE (123,81)-(132,89),4,bf LOCATE 13,1:Shadow "Wald :",9,1,9,0,0,0:LINE (123,97)-(132,105),5,bf LOCATE 15,1:Shadow "Gebirge :",9,1,9,0,0,0:LINE (123,113)-(132,121),14,bf LOCATE 17,1:Shadow "Bauwerk :",9,1,9,0,0,0:LINE (123,129)-(132,137),15,bf LOCATE 19,1:Shadow "Sumpf :",9,1,9,0,0,0:LINE (123,145)-(132,153),2,bf LOCATE 22,1:Shadow "Helle Armee :",9,1,9,0,0,0:LINE(153,169)-(161,177),12,bf:CIRCLE (157,173),1,9 LOCATE 24,1:Shadow "Dunkle Armee :",9,1,9,0,0,0:LINE (153,185)-(161,193),3,bf:CIRCLE (157,189),1,9 FOR i%=0 TO 38 ii%=i%*6+1 FOR j%=0 TO 38 jj%=j%*10+210 IF bi%(fig%(j%,i%))<9 THEN obf%=12 :ELSE obf%=3 IF fig%(j%,i%)<>0 THEN LINE (jj%,ii%)-STEP(8,4),obf%,bf CIRCLE (jj%+4,ii%+2),1,9 GOTO abc END IF LINE (jj%,ii%)-STEP(8,4),fb%(spar%(j%,i%)),bf abc: NEXT j% NEXT i% LINE (338,1)-(339,233),9,b LINE (468,1)-(469,233),9,b LINE (210,78)-(598,78),9 LINE (210,156)-(598,156),9 k$=INKEY$ WHILE k$<>" " k$=INKEY$ WEND SOUND 700,4.5,200,0:SOUND 710,4.5,200,1 LINE (180,1)-(639,235),0,bf GOSUB groclear Mapon bldnr END IF IF k$=CHR$(27) THEN SOUND 700,4.5,200,0:SOUND 710,4.5,200,1 OBJECT.OFF 1 LINE (180,1)-(639,235),0,bf GOSUB groclear LOCATE 11,34:Shadow "Möchten Sie das Spiel",9,1,9,0,0,0 LOCATE 13,32:Shadow "(a)bbrechen, (s)peichern",9,1,9,0,0,0 LOCATE 15,35:Shadow "oder (f)ortführen ?",9,1,9,0,0,0 k$=UCASE$(INKEY$) WHILE k$<>"A" AND k$<>"S" AND k$<>"F" k$=UCASE$(INKEY$) WEND SOUND 700,4.5,200,0:SOUND 710,4.5,200,1 IF k$="A" THEN WINDOW CLOSE 2:SCREEN CLOSE 1 SYSTEM END IF IF k$="S" THEN GOSUB speichern LINE (180,1)-(639,235),0,bf Mapon bldnr END IF RETURN genommen: SOUND 700,4.5,200,0:SOUND 710,4.5,200,1 PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(fig%(zx,zy))),PRESET zxalt=zx:zyalt=zy:REM Ursprungskoordinaten merken ugrnd%=spar%(zx,zy):REM Untergrund merken f%=fig%(zx,zy):zgw=0:mpjn=0:bldnralt=bldnr GOSUB groclear LOCATE 5,1:Shadow nam$(bi%(f%)),9,1,9,0,0,0 LOCATE 8,1:Shadow "Stärke :",9,1,9,0,0,0:LOCATE 8,12:Shadow STR$(st%(f%)),9,1,9,0,0,0 LOCATE 10,1:Shadow "Reichweiten",9,1,9,0,0,0 LOCATE 12,1:Shadow "- Marsch :",9,1,9,0,0,0:LOCATE 12,12:Shadow STR$(ma%(f%)),9,1,9,0,0,0 LOCATE 14,1:Shadow "- Waffen :",9,1,9,0,0,0:LOCATE 14,12:Shadow STR$(wa%(f%)),9,1,9,0,0,0 LOCATE 17,1:Shadow "Verbl. Züge :",9,1,9,0,0,0 E: mclr 16,15:LOCATE 17,14:Shadow STR$(ma%(f%)),9,1,9,0,0,0 tsabfr: k$="" WHILE k$="" k$=INKEY$ WEND IF k$=CHR$(127) THEN zgw=0:zx=zxalt:zy=zyalt:bgl=0 IF mpjn=0 THEN Zeigerset zx,zy,bldnr :ELSE Mapon bldnralt:bldnr=bldnralt:mpjn=0:PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(fig%(zx,zy))),PRESET GOTO E END IF IF k$=CHR$(13) THEN SOUND 400,4.5,200,0:SOUND 410,4.5,200,1 IF (fig%(zx,zy)<>0 AND fig%(zx,zy)<>f%) THEN beweg%(f%)=beweg%(f%)+1:tza=tza+1 GOSUB gefecht:warten(2):GOSUB groclear IF mpjn=0 AND freundkill=0 THEN PUT ((zxalt MOD 13)*35+180,(zyalt MOD 13)*18+1),ob%(0,bi%(fig%(zxalt,zyalt))),PSET RETURN END IF IF (bi%(f%)<>8 AND bi%(f%)<>17) OR ((bi%(f%)=8 OR bi%(f%)=17) AND spar%(zx,zy)<>3) THEN IF (bi%(f%)<>5 AND bi%(f%)<>14) OR ((bi%(f%)=5 OR bi%(f%)=14) AND spar%(zx,zy)<>4) THEN IF fig%(zx,zy)<>f% THEN beweg%(f%)=beweg%(f%)+1:tza=tza+1 IF mpjn=0 THEN PUT ((zxalt MOD 13)*35+180,(zyalt MOD 13)*18+1),ob%(0,ugrnd%+18),PSET PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(f%)),PSET fig%(zxalt,zyalt)=0:REM alten Platz löschen fig%(zx,zy)=f%:REM neuen Platz besetzen cx%(spieler)=zx:cy%(spieler)=zy:mm%(spieler)=bldnr ELSE PUT ((zxalt MOD 13)*35+180,(zyalt MOD 13)*18+1),ob%(0,bi%(fig%(zxalt,zyalt))),PSET END IF ELSE PUT ((zxalt MOD 13)*35+180,(zyalt MOD 13)*18+1),ob%(0,bi%(fig%(zxalt,zyalt))),PSET END IF GOSUB groclear RETURN END IF IF zgw>=ma%(f%) THEN tsabfr IF k$=CHR$(28) AND zy>0 THEN fg%=fig%(zx,zy-1):sr%=spar%(zx,zy-1) IF (bi%(f%)=6 OR bi%(f%)=15) AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN a IF (bi%(f%)=5 OR bi%(f%)=14) AND (sr%=4 OR sr%=6) AND wa%(f%)>zgw THEN a IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%<>3 AND bgl=1 THEN zgw=0:zx=zxalt:zy=zyalt:bgl=0 IF mpjn=0 THEN Zeigerset zx,zy,bldnr :ELSE Mapon bldnralt:bldnr=bldnralt:mpjn=0:PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(fig%(zx,zy))),PRESET GOTO E END IF IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%=3 AND wa%(f%)>zgw THEN a IF sr%<>1 AND sr%<>3 AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN a: IF (zy MOD 13<>0) THEN zy=zy-1:GOSUB mapr:Zeigerset zx,zy,bldnr ELSE zy=zy-1:GOSUB mapr:bldnr=bldnr+3:Mapon bldnr END IF END IF END IF IF k$=CHR$(29) AND zy<38 THEN fg%=fig%(zx,zy+1):sr%=spar%(zx,zy+1) IF (bi%(f%)=6 OR bi%(f%)=15) AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN b IF (bi%(f%)=5 OR bi%(f%)=14) AND (sr%=4 OR sr%=6) AND wa%(f%)>zgw THEN b IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%<>3 AND bgl=1 THEN zgw=0:zx=zxalt:zy=zyalt:bgl=0 IF mpjn=0 THEN Zeigerset zx,zy,bldnr :ELSE Mapon bldnralt:bldnr=bldnralt:mpjn=0:PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(fig%(zx,zy))),PRESET GOTO E END IF IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%=3 AND wa%(f%)>zgw THEN b IF sr%<>1 AND sr%<>3 AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN b: IF ((zy+1) MOD 13<>0) THEN zy=zy+1:GOSUB mapr:Zeigerset zx,zy,bldnr ELSE zy=zy+1:GOSUB mapr:bldnr=bldnr-3:Mapon bldnr END IF END IF END IF IF k$=CHR$(30) AND zx<38 THEN fg%=fig%(zx+1,zy):sr%=spar%(zx+1,zy) IF (bi%(f%)=6 OR bi%(f%)=15) AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN c IF (bi%(f%)=5 OR bi%(f%)=14) AND (sr%=4 OR sr%=6) AND wa%(f%)>zgw THEN c IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%<>3 AND bgl=1 THEN zgw=0:zx=zxalt:zy=zyalt:bgl=0 IF mpjn=0 THEN Zeigerset zx,zy,bldnr :ELSE Mapon bldnralt:bldnr=bldnralt:mpjn=0:PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(fig%(zx,zy))),PRESET GOTO E END IF IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%=3 AND wa%(f%)>zgw THEN c IF sr%<>1 AND sr%<>3 AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN c: IF ((zx+1) MOD 13<>0) THEN zx=zx+1:GOSUB mapr:Zeigerset zx,zy,bldnr ELSE zx=zx+1:GOSUB mapr:bldnr=bldnr+1:Mapon bldnr END IF END IF END IF IF k$=CHR$(31) AND zx>0 THEN fg%=fig%(zx-1,zy):sr%=spar%(zx-1,zy) IF (bi%(f%)=6 OR bi%(f%)=15) AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN d IF (bi%(f%)=5 OR bi%(f%)=14) AND (sr%=4 OR sr%=6) AND wa%(f%)>zgw THEN d IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%<>3 AND bgl=1 THEN zgw=0:zx=zxalt:zy=zyalt:bgl=0 IF mpjn=0 THEN Zeigerset zx,zy,bldnr :ELSE Mapon bldnralt:bldnr=bldnralt:mpjn=0:PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,bi%(fig%(zx,zy))),PRESET GOTO E END IF IF (bi%(f%)=8 OR bi%(f%)=17) AND sr%=3 AND wa%(f%)>zgw THEN d IF sr%<>1 AND sr%<>3 AND sr%<>4 AND (fg%=0 OR (spieler=0 AND fg%<48 AND wa%(f%)>zgw) OR (spieler=1 AND fg%>47 AND wa%(f%)>zgw)) THEN d: IF (zx MOD 13<>0) THEN zx=zx-1:GOSUB mapr:Zeigerset zx,zy,bldnr ELSE zx=zx-1:GOSUB mapr:bldnr=bldnr-1:Mapon bldnr END IF END IF END IF IF UCASE$(k$)="F" AND fig%(zx,zy)=0 THEN fg%=fig%(zxalt,zyalt):sr%=spar%(zx,zy) IF (bi%(fg%)=5 OR bi%(fg%)=14) THEN FOR i=800 TO 100 STEP -20 SOUND i,1,200,0:SOUND i+10,1.5,200,1 NEXT i IF sr%=6 OR sr%=4 THEN beweg%(fg%)=beweg%(fg%)+1:tza=tza+1 spar%(zx,zy)=0 IF sr%=6 AND zx>17 AND zx<21 THEN spar%(zx,zy)=1 END IF END IF PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,spar%(zx,zy)+18),PSET IF mpjn=1 THEN zx=zxalt:zy=zyalt:Mapon bldnralt:bldnr=bldnralt:mpjn=0:bgl=0 PUT ((zxalt MOD 13)*35+180,(zyalt MOD 13)*18+1),ob%(0,bi%(fig%(zxalt,zyalt))),PSET GOSUB groclear RETURN END IF IF UCASE$(k$)="S" AND fig%(zx,zy)=0 THEN fg%=fig%(zxalt,zyalt):sr%=spar%(zx,zy) IF (bi%(fg%)=8 OR bi%(fg%)=17) AND sr%=3 AND st%(fg%)>8 THEN FOR i=800 TO 100 STEP -20 SOUND i,1,200,0:SOUND i+10,1.5,200,1 NEXT i spar%(zx,zy)=0 PUT ((zx MOD 13)*35+180,(zy MOD 13)*18+1),ob%(0,18),PSET st%(fg%)=st%(fg%)-8 beweg%(fg%)=beweg%(fg%)+1 END IF bgl=0 IF mpjn=1 THEN zx=zxalt:zy=zyalt:Mapon bldnralt:bldnr=bldnralt:mpjn=0 PUT ((zxalt MOD 13)*35+180,(zyalt MOD 13)*18+1),ob%(0,bi%(fig%(zxalt,zyalt))),PSET GOSUB groclear RETURN END IF GOTO tsabfr mapr: IF NOT (bi%(f%)=6 OR bi%(f%)=15) AND spar%(zx,zy)=2 THEN zgw=zgw+1 IF NOT (bi%(f%)=6 OR bi%(f%)=15) AND spar%(zx,zy)=5 THEN zgw=zgw+2 IF (bi%(f%)<>8 AND bi%(f%)<>17) OR ((bi%(f%)=8 OR bi%(f%)=17) AND spar%(zx,zy)<>3) THEN zgw=zgw+1 :ELSE bgl=1 mclr 16,15:LOCATE 17,14 IF zgw>=ma%(f%) THEN Shadow " 0",9,1,9,0,0,0 ELSE Shadow STR$(ma%(f%)-zgw),9,1,9,0,0,0 END IF IF (spieler=0 AND fig%(zx,zy)<48 AND fig%(zx,zy)>0) OR (spieler=1 AND fig%(zx,zy)>47) THEN LINE (5,160)-STEP(160,30),0,bf LOCATE 21,1:Shadow nam$(bi%(fig%(zx,zy))),9,1,9,0,0,0 LOCATE 23,1:Shadow "Stärke : "+STR$(st%(fig%(zx,zy))),9,1,9,0,0,0 ELSE LINE (5,160)-STEP(160,30),0,bf END IF RETURN gefecht: minsta%=3:minstb%=3:freundkill=0:feindkill=0 IF st%(f%)"J" AND k$<>"N" k$=UCASE$(INKEY$) WEND IF k$="J" THEN RUN WINDOW CLOSE 2:SCREEN CLOSE 1 SYSTEM TitleScreen: GOSUB farbenaus CLS LINE (150,6)-(492,39),1,bf LINE (154,2)-(488,43),1,bf LINE (150,6)-(492,39),6,b LINE (154,2)-(488,43),7,b LOCATE 3,12 Shadow "Kampf um Eriador",12,2,19,0,0,0 Diskfont "garnet",9 RESTORE data1:endw=23 IF loaded=1 THEN endw=22 FOR i=12 TO endw LOCATE i,12:READ tx$:Shadow tx$,9,1,9,0,0,0 NEXT i GOSUB farbreset:PALETTE 0,0,0.2,0:PALETTE 1,0,0,0 IF loaded=1 THEN warten(10):RETURN abfr: tx$=INKEY$ IF UCASE$(tx$)="N" THEN RETURN IF UCASE$(tx$)<>"J" THEN abfr data1: DATA "Ein Fantasy - Strategiespiel für zwei Personen"," " DATA " nach einer Grundidee von Dirk Meier"," "," " DATA " Entwickelt und programmiert von"," " DATA " Ralf Böwing und Roland Hartz"," "," "," " DATA " Wünschen Sie eine Einleitung ?" GOSUB farbenaus LINE (0,80)-(639,255),0,bf RESTORE data2 FOR i=9 TO 26 STEP 2 LOCATE i,2:READ tx$:Shadow tx$,9,1,9,0,0,0 NEXT i GOSUB farbreset:PALETTE 0,0,0.2,0:PALETTE 1,0,0,0 data2: DATA "In den jungen Jahren von Eglador entbrannte zum ersten Mal der" DATA "Kampf zwischen den Herrschern des Lichts und der Finsternis." DATA "Bisher konnte jedoch noch keine der beiden Seiten einen end-" DATA "gültigen Sieg erringen." DATA " " DATA "Aber im Jahre 6735 des zweiten Zeitalters bahnt sich das zukunfts-" DATA "bestimmende letzte Gefecht zwischen den beiden Gegnern an. Im" DATA "Lande Eriador entscheidet sich zwischen den verbleibenden Legionen" DATA "das Schicksal von Eglador..." warten (20) gh: CLS:GOSUB farbenaus LOCATE 3,2:Shadow "Die helle Legion :",9,1,9,0,0,0 LOCATE 3,38:Shadow "Die dunkle Legion :",9,1,9,0,0,0 i=0 RESTORE fig FOR y%=39 TO 224 STEP 21 LINE (18,y%+2)-(53,y%+19),1,bf PUT (14,y%),ob%(0,i),PSET READ d$:Shadow d$,9,1,9,1,72,y%+11 i=i+1 NEXT y% FOR y%=39 TO 224 STEP 21 LINE (342,y%+2)-(375,y%+19),1,bf PUT (338,y%),ob%(0,i),PSET READ d$:Shadow d$,9,1,9,1,400,y%+11 i=i+1 NEXT y% fig: DATA "3 Axtmänner","3 Schwertkämpfer","2 Legionäre","2 Ritter","2 Schützen","Belagerungsmannschaft" DATA "2 Adler","König des Lichts","Magier" DATA "3 Keulenmänner","3 Schwertkämpfer","2 Legionäre","2 Ritter","2 Schützen","Belagerungsmannschaft" DATA "2 Drachen","König der Finsternis","Magier" GOSUB farbreset:PALETTE 0,0,0.2,0:PALETTE 1,0,0,0 warten (40) GOSUB farbenaus CLS Shadow "Jeder Spieler verfügt über drei der gezeigten Legionen - es muß",9,1,9,1,15,31 Shadow "wohl nicht ausdrücklich erwähnt werden, daß jede Seite nur EINEN",9,1,9,1,15,45 Shadow "König bzw. Magier hat !",9,1,9,1,15,59 Shadow "Im Folgenden sind die Landschaftselemente dargestellt :",9,1,9,1,15,88 RESTORE scene:i=18 FOR y%=107 TO 212 STEP 21 LINE (50,y%+2)-(83,y%+19),1,bf PUT (46,y%),ob%(0,i),PSET READ d$:Shadow d$,9,1,9,1,114,y%+11 i=i+1 NEXT y% scene: DATA "Ebene - begehbar von allen","Wasser - nur von Adlern und Drachen überwindbar" DATA "Wald - mindert Marschgeschwindigkeit um 1 Feld","Gebirge - siehe Wasser" DATA "Bauwerke - kann man mit Katapulten zerstören","Sumpf - mindert Marschgeschwindigkeit um 2 Felder" GOSUB farbreset:PALETTE 0,0,0.2,0:PALETTE 1,0,0,0 warten (35) GOSUB farbreset CLS LOCATE 2,1:Shadow "Hier die Residenz",9,1,9,0,0,0 LOCATE 4,1:Shadow " des hellen",9,1,9,0,0,0 LOCATE 6,1:Shadow " Königs :",9,1,9,0,0,0 zx=0:zy=0:Mapon (7):warten (20) CLS LOCATE 24,1:Shadow "Hier die Residenz",9,1,9,0,0,0 LOCATE 26,1:Shadow " des dunklen",9,1,9,0,0,0 LOCATE 28,1:Shadow " Königs :",9,1,9,0,0,0 zx=38:zy=38:Mapon (3):warten (20) einl=1 RETURN REM *** Spielbeginn *** Spiel: IF einl=0 THEN CLS:GOSUB farbreset:Mapon(3) :ELSE GOSUB groclear IF loaded=0 THEN Shadow " Der dunkle König beginnt den Feldzug !",9,1,9,1,2,248 ELSE IF turn=0 THEN zw$="dunkle König" :ELSE zw$="helle König" Shadow " Der "+zw$+" führt den Feldzug fort !",9,1,9,1,2,248 END IF warten (2):GOSUB kleinclear zx=38:zy=38:bldnr=3:Zeigerset zx,zy,bldnr:spieler=turn cx%(0)=38:cy%(0)=38:cx%(1)=0:cy%(1)=0:mm%(0)=3:mm%(1)=7:win=0 REM *** Hauptschleife des Spiels *** Haupt: tza=0 IF fganz(spieler)<15 THEN tzagrenze=fganz(spieler) :ELSE tzagrenze=15 SOUND 270,4.5,200,0:SOUND 280,4.5,200,1 IF spieler=0 THEN Shadow " Zugphase dunkler König",9,1,9,1,2,248:offs=48 ELSE Shadow " Zugphase heller König",9,1,9,1,2,248:offs=1 END IF warten(2):GOSUB kleinclear zx=cx%(spieler):zy=cy%(spieler) IF mm%(spieler)<>bldnr THEN Mapon mm%(spieler):bldnr=mm%(spieler) Zeigerset zx,zy,bldnr:OBJECT.ON 1:GOSUB groclear:warten(1) l: GOSUB tasten IF spar%(0,1)=4 AND spar%(1,0)=4 AND fganz(1)=1 THEN win=1 IF spar%(37,38)=4 AND spar%(38,37)=4 AND fganz(0)=1 THEN win=2 IF win<>0 THEN winscreen IF tza